package br.com.knowledge.persistence.hibernate.entities;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;

/**
 * CadUsuarioprojeto entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "cad_usuarioprojeto", schema = "public")
public class CadUsuarioprojeto implements java.io.Serializable {

	// Fields
	private Integer id;
	private CadProjeto cadProjeto;
	private CadUsuario cadUsuario;
	private String pathusuario;
	private Set<CadFuncao> cadFuncaos = new HashSet<CadFuncao>(0);
	private Set<CadFuncao> cadFuncaos_1 = new HashSet<CadFuncao>(0);

	// Constructors

	/** default constructor */
	public CadUsuarioprojeto() {
	}

	/** minimal constructor */
	public CadUsuarioprojeto(CadProjeto cadProjeto, CadUsuario cadUsuario) {
		this.cadProjeto = cadProjeto;
		this.cadUsuario = cadUsuario;
	}

	/** full constructor */
	public CadUsuarioprojeto(CadProjeto cadProjeto, CadUsuario cadUsuario,
			String pathusuario, Set<CadFuncao> cadFuncaos,
			Set<CadFuncao> cadFuncaos_1) {
		this.cadProjeto = cadProjeto;
		this.cadUsuario = cadUsuario;
		this.pathusuario = pathusuario;
		this.cadFuncaos = cadFuncaos;
		this.cadFuncaos_1 = cadFuncaos_1;
	}

	// Property accessors
	@GenericGenerator(name = "generator", strategy = "increment")
	@Id
	@GeneratedValue(generator = "generator")
	@Column(name = "id", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "cad_projeto_id", nullable = false)
	public CadProjeto getCadProjeto() {
		return this.cadProjeto;
	}

	public void setCadProjeto(CadProjeto cadProjeto) {
		this.cadProjeto = cadProjeto;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "cad_usuario_id", nullable = false)
	public CadUsuario getCadUsuario() {
		return this.cadUsuario;
	}

	public void setCadUsuario(CadUsuario cadUsuario) {
		this.cadUsuario = cadUsuario;
	}

	@Column(name = "pathusuario", length = 256)
	public String getPathusuario() {
		return this.pathusuario;
	}

	public void setPathusuario(String pathusuario) {
		this.pathusuario = pathusuario;
	}

	@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "acd_papelusuarioprojeto", schema = "public", joinColumns = { @JoinColumn(name = "cad_usuarioprojeto_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "cad_funcao_id", nullable = false, updatable = false) })
	public Set<CadFuncao> getCadFuncaos() {
		return this.cadFuncaos;
	}

	public void setCadFuncaos(Set<CadFuncao> cadFuncaos) {
		this.cadFuncaos = cadFuncaos;
	}

	@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "acd_papelusuarioprojeto", schema = "public", joinColumns = { @JoinColumn(name = "cad_usuarioprojeto_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "cad_funcao_id", nullable = false, updatable = false) })
	public Set<CadFuncao> getCadFuncaos_1() {
		return this.cadFuncaos_1;
	}

	public void setCadFuncaos_1(Set<CadFuncao> cadFuncaos_1) {
		this.cadFuncaos_1 = cadFuncaos_1;
	}

}